Python 3.14 планируется к релизу 7 октября 2025 года. В нем будут представлены значительные улучшения производительности, включая новый экспериментальный интерпретатор и оптимизацию различных встроенных модулей.
Кроме того, Python 3.14 вводит несколько изменений синтаксиса, которые важно учитывать разработчикам:
Сейчас разработчики могут по ошибке использовать операторы управления потоком (такие как
return
, break
или continue
) в блоках finally
, что может привести к неожиданному поведению. В Python 3.14 будет выводиться SyntaxWarning при наличии таких операторов в блоках finally
.Пример:
def return_example():
try:
print("В блоке try")
return "Возврат из блока try"
except Exception as e:
print(f"Ошибка: {e}")
finally:
print("В блоке finally")
return "Возврат из блока finally" # Перекрывает возврат из try
result = return_example()
print(f"Результат: {result}")
Вывод:
В блоке try
В блоке finally
Результат: Возврат из блока finally
Это изменение поможет избежать ошибок, когда контрольный поток блока
finally
перезаписывает поток из блоков try/except
.В Python 3.14 больше не требуется использовать скобки при перехвате нескольких исключений. Это упрощает код, но скобки всё равно необходимы, если вы используете конструкцию
as
для захвата экземпляра исключения.Пример:
def divide(a, b):
try:
result = a / b
return result
except ZeroDivisionError, TypeError: # Обработка без скобок
print(f"Неправильный ввод: {a} и {b}")
raise
Однако если вы захватываете экземпляр исключения, скобки всё равно требуются:
def divide(a, b):
try:
result = a / b
return result
except (ZeroDivisionError, TypeError) as e:
print(f"Ошибка: {e}")
raise e
Хотя это обновление и незначительное, оно упрощает код при работе с несколькими исключениями.
В предыдущих версиях Python ссылаться на класс в аннотациях типов до того, как он был полностью определён, приводило к ошибке
NameError
. Разработчики должны были использовать строковые литералы или импортировать __future__
, чтобы избежать этой проблемы. В Python 3.14 аннотации типов теперь оцениваются только по мере необходимости.Пример (до Python 3.14):
class Node:
def __init__(self, value: int, next: Node): # Ошибка NameError
self.value = value
self.next = next
Теперь в Python 3.14 нет необходимости в специальных импортируемых модулях или строковых аннотациях:
class Node:
def __init__(self, value: int, next: Node): # Работает без ошибок
self.value = value
self.next = next
Аннотации типов теперь оцениваются только во время выполнения, что делает их использование более простым и чистым.
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Proglib.academy | IT-курсы
Please open Telegram to view this post
VIEW IN TELEGRAM
🐍 Python 3.15 — расписание релиза (PEP 790)
📅 Этапы разработки:
— Начало разработки: 6 мая 2025
— Альфа-релизы:
📝 Alpha 1: 14 октября 2025
📝 Alpha 2: 18 ноября 2025
📝 Alpha 3: 16 декабря 2025
📝 Alpha 4: 13 января 2026
📝 Alpha 5: 10 февраля 2026
📝 Alpha 6: 10 марта 2026
📝 Alpha 7: 7 апреля 2026
— Бета-релизы (без добавления новых фич):
📝 Beta 1: 5 мая 2026
📝 Beta 2: 26 мая 2026
📝 Beta 3: 16 июня 2026
📝 Beta 4: 14 июля 2026
— Release candidates:
📝 RC1: 28 июля 2026
📝 RC2: 1 сентября 2026
— Финальный релиз: 1 октября 2026 (четверг)
🔧 Срок поддержки:
📝 Bugfix-обновления: каждые ~2 месяца в течение 2 лет (до выхода Python 3.18.0 final)
📝 Обновления безопасности (только исходный код): ещё 3 года — до октября 2031
Библиотека питониста #свежак
📅 Этапы разработки:
— Начало разработки: 6 мая 2025
— Альфа-релизы:
— Бета-релизы (без добавления новых фич):
— Release candidates:
— Финальный релиз: 1 октября 2026 (четверг)
🔧 Срок поддержки:
Библиотека питониста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Модуль
enum
в Python используется для создания перечислений — объектов, которые упрощают работу с группами связанных константных значений. Это полезно для удобного различия значений без привязки к их конкретным значениям, например, при работе с параметрами конфигурации.Enum
и auto
Перечисления позволяют избежать ошибок с опечатками и делают код более читаемым.
Пример с конкретными значениями:
from enum import Enum
class TempUnit(Enum):
CELSIUS = "celsius"
FAHRENHEIT = "fahrenheit"
def get_temperature(city, unit):
return 18.0 if unit == TempUnit.CELSIUS else 64.4
print(get_temperature("Lisbon", TempUnit.CELSIUS)) # 18.0
Перечисления упрощают работу с значениями:
print(TempUnit.CELSIUS.name) # CELSIUS
print(TempUnit.CELSIUS.value) # celsius
Для целочисленных значений можно использовать
auto()
для автоматической нумерации:from enum import Enum, auto
class Weekday(Enum):
SUNDAY = auto()
MONDAY = auto()
TUESDAY = auto()
WEDNESDAY = auto()
THURSDAY = auto()
FRIDAY = auto()
SATURDAY = auto()
Для строковых значений можно использовать
StrEnum
:from enum import StrEnum
class TempUnit(StrEnum):
CELSIUS = "celsius"
FAHRENHEIT = "fahrenheit"
print(TempUnit.CELSIUS.capitalize()) # Celsius
Автоматическая строковая нумерация:
from enum import StrEnum, auto
class TempUnit(StrEnum):
CELSIUS = auto()
FAHRENHEIT = auto()
assert TempUnit.CELSIUS.value == "celsius"
Целочисленные перечисления с
IntEnum
:from enum import IntEnum
class SomeIntegers(IntEnum):
ONE = 1
TWO = 2
THREE = 3
print(SomeIntegers.TWO + 1) # 3
Флаги с
Flag
для комбинирования флагов:from enum import Flag, auto
class NotificationMethod(Flag):
IN_APP = auto()
PUSH = auto()
EMAIL = auto()
SMS = auto()
user_settings = NotificationMethod.IN_APP | NotificationMethod.PUSH
print(user_settings) # <NotificationMethod.IN_APP|PUSH: 3>
Проверка уникальности значений с помощью декоратора
@unique
:from enum import Enum, unique
@unique
class EnumWithAliases(Enum):
ONE = 1
TWO = 2
THREE = 3
UNO = 1 # Ошибка, дублирующее значение
Проверка непрерывности значений с помощью декоратора
@verify(CONTINUOUS)
:from enum import Enum, verify, CONTINUOUS
@verify(CONTINUOUS)
class Nums(Enum):
THREE = 3
FOUR = 4
FIVE = 5
SIX = 6
@verify(CONTINUOUS)
class NumsHole(Enum):
THREE = 3
FOUR = 4
SIX = 6 # Ошибка, отсутствует 5
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Азбука айтишника
🎓 Как выбрать свою роль в Data Science и не потеряться в терминах
Если вы только начинаете разбираться в Data Science — перед вами лабиринт из названий: data scientist, аналитик, ML-инженер, BI, архитектор... Кто чем занимается? Что нужно учить?
➡️ Что внутри статьи
— Кто такие Data Engineer
— Чем отличается Data Architect от инженера и зачем он нужен в big data проектах
— Чем занимаются Data Analyst и почему это отличная точка входа в карьеру
— Что делает настоящий Data Scientist
В статье разобрано всё: от задач до технологий, которые реально спрашивают на собеседованиях.
📎 Ссылка
Азбука айтишника #ликбез
Если вы только начинаете разбираться в Data Science — перед вами лабиринт из названий: data scientist, аналитик, ML-инженер, BI, архитектор... Кто чем занимается? Что нужно учить?
— Кто такие Data Engineer
— Чем отличается Data Architect от инженера и зачем он нужен в big data проектах
— Чем занимаются Data Analyst и почему это отличная точка входа в карьеру
— Что делает настоящий Data Scientist
В статье разобрано всё: от задач до технологий, которые реально спрашивают на собеседованиях.
📎 Ссылка
Азбука айтишника #ликбез
Please open Telegram to view this post
VIEW IN TELEGRAM
🔎 Wordsearch: узнаем, кто самый внимательный
Готовы проверить свои знания в Python? В этой головоломке спрятаны термины из мира программирования.
Правила просты:
— Найдите все слова в сетке (слова идут по горизонтали)
— Напишите в комментариях, какие слова вы нашли
— Объясните один из терминов так, чтобы даже джун понял
🏆 Первый, кто найдёт все слова и объяснит хотя бы один термин, получит почётный статус Python Guru на неделю!
Прячем ответы под спойлер, чтобы не спалить остальным.
Погнали 👇
Библиотека питониста #междусобойчик
Готовы проверить свои знания в Python? В этой головоломке спрятаны термины из мира программирования.
Правила просты:
— Найдите все слова в сетке (слова идут по горизонтали)
— Напишите в комментариях, какие слова вы нашли
— Объясните один из терминов так, чтобы даже джун понял
🏆 Первый, кто найдёт все слова и объяснит хотя бы один термин, получит почётный статус Python Guru на неделю!
Прячем ответы под спойлер, чтобы не спалить остальным.
Погнали 👇
Библиотека питониста #междусобойчик
📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих»
Мы написали и собрали для вас в одну подборку все 25 глав и 230 практических заданий!
🐍 Часть 1: Особенности, сферы применения, установка, онлайн IDE
🐍 Часть 2: Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
🐍 Часть 3: Типы данных: преобразование и базовые операции
🐍 Часть 4: Методы работы со строками
🐍 Часть 5: Методы работы со списками и списковыми включениями
🐍 Часть 6: Методы работы со словарями и генераторами словарей
🐍 Часть 7: Методы работы с кортежами
🐍 Часть 8: Методы работы со множествами
🐍 Часть 9: Особенности цикла for
🐍 Часть 10: Условный цикл while
🐍 Часть 11: Функции с позиционными и именованными аргументами
🐍 Часть 12: Анонимные функции
🐍 Часть 13: Рекурсивные функции
🐍 Часть 14: Функции высшего порядка, замыкания и декораторы
🐍 Часть 15: Методы работы с файлами и файловой системой
🐍 Часть 16: Регулярные выражения
🐍 Часть 17: Основы скрапинга и парсинга
🐍 Часть 18: Основы ООП – инкапсуляция и наследование
🐍 Часть 19: Основы ООП – абстракция и полиморфизм
🐍 Часть 20: Графический интерфейс на Tkinter
🐍 Часть 21: Основы разработки игр на Pygame
🐍 Часть 22: Основы работы с SQLite
🐍 Часть 23: Основы веб-разработки на Flask
🐍 Часть 24: Основы работы с NumPy
🐍 Часть 25: Основы анализа данных с Pandas
Мы написали и собрали для вас в одну подборку все 25 глав и 230 практических заданий!
🐍 Часть 1: Особенности, сферы применения, установка, онлайн IDE
🐍 Часть 2: Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
🐍 Часть 3: Типы данных: преобразование и базовые операции
🐍 Часть 4: Методы работы со строками
🐍 Часть 5: Методы работы со списками и списковыми включениями
🐍 Часть 6: Методы работы со словарями и генераторами словарей
🐍 Часть 7: Методы работы с кортежами
🐍 Часть 8: Методы работы со множествами
🐍 Часть 9: Особенности цикла for
🐍 Часть 10: Условный цикл while
🐍 Часть 11: Функции с позиционными и именованными аргументами
🐍 Часть 12: Анонимные функции
🐍 Часть 13: Рекурсивные функции
🐍 Часть 14: Функции высшего порядка, замыкания и декораторы
🐍 Часть 15: Методы работы с файлами и файловой системой
🐍 Часть 16: Регулярные выражения
🐍 Часть 17: Основы скрапинга и парсинга
🐍 Часть 18: Основы ООП – инкапсуляция и наследование
🐍 Часть 19: Основы ООП – абстракция и полиморфизм
🐍 Часть 20: Графический интерфейс на Tkinter
🐍 Часть 21: Основы разработки игр на Pygame
🐍 Часть 22: Основы работы с SQLite
🐍 Часть 23: Основы веб-разработки на Flask
🐍 Часть 24: Основы работы с NumPy
🐍 Часть 25: Основы анализа данных с Pandas
🚀 Релизы и инструменты:
— pip 25.1— поддержка групп зависимостей и вывод lock-файлов
— Python 3.15: расписание релиза (PEP 790) — важные даты и этапы разработки
— PyCharm стал единым продуктом — что изменилось для разработчиков
— AutoKitteh — гибкая альтернатива Zapier и n8n для автоматизации
— Django Action Triggers — триггеры действий прямо в Django
— IT-календарь: релизы и события мая — чтобы ничего не пропустить
👍 Советы:
— Как запускать Python в проде — практики деплоя и окружения
— Как я строю инфраструктуру вокруг Python-проектов — линтеры, Poetry, CI/CD и Docker
— Управление памятью в Python — когда и зачем вмешиваться вручную
— 14 интересных фич Python — полезные, хоть и не всегда pythonic
Библиотека питониста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека задач по Python | тесты, код, задания
Что представляют собой генераторы в Python, как функционирует метод send() в этих генераторах и каким образом его можно применять для управления их поведением?
Генераторы в Python представляют собой функции, которые применяют оператор yield для возврата значений и временной приостановки выполнения. С помощью метода send() можно отправлять данные обратно в генератор, которые затем могут быть использованы при следующем возобновлении его работы. Это делает генераторы двусторонними, позволяя не только получать значения, но и передавать данные внутрь.
Генераторы в Python представляют собой функции, которые применяют оператор yield для возврата значений и временной приостановки выполнения. С помощью метода send() можно отправлять данные обратно в генератор, которые затем могут быть использованы при следующем возобновлении его работы. Это делает генераторы двусторонними, позволяя не только получать значения, но и передавать данные внутрь.
🔥 Конкурс: 30 000 ₽ за самую смешную IT-новость
Напоминаем о конкурсе «Библиотеки программиста»: напишите самую смешную версию реальной новости про технологии.
👾 Правила просты:
1. Берете настоящую новость из мира технологий.
2. Переписываете ее так, чтобы смеялись все.
3. Получаете деньги и славу.
🎁 Призы:
- 1 место: 30 000 ₽ + статус ведущего нового юмористического IT-канала
- 2 и 3 место: по 5 000 ₽ + вечный почет в IT-сообществе
🏆 Как будем оценивать:
Мы выложим новости всех участников в одном из наших телеграм-каналов. Те новости, которые наберут больше всего охвата, войдут в шорт-лист. Из шорт-листа подписчики и жюри выберут победителя.
📅 Сроки: прием новостей до 11 мая включительно
Для участия отправьте свою смешную новость в гугл-форму: https://forms.gle/6YShjgfiycfJ53LX8
Осталась неделя — ждем ваших новостей!
Напоминаем о конкурсе «Библиотеки программиста»: напишите самую смешную версию реальной новости про технологии.
👾 Правила просты:
1. Берете настоящую новость из мира технологий.
2. Переписываете ее так, чтобы смеялись все.
3. Получаете деньги и славу.
🎁 Призы:
- 1 место: 30 000 ₽ + статус ведущего нового юмористического IT-канала
- 2 и 3 место: по 5 000 ₽ + вечный почет в IT-сообществе
🏆 Как будем оценивать:
Мы выложим новости всех участников в одном из наших телеграм-каналов. Те новости, которые наберут больше всего охвата, войдут в шорт-лист. Из шорт-листа подписчики и жюри выберут победителя.
📅 Сроки: прием новостей до 11 мая включительно
Для участия отправьте свою смешную новость в гугл-форму: https://forms.gle/6YShjgfiycfJ53LX8
Осталась неделя — ждем ваших новостей!
Google Docs
Конкурс на самую смешную IT-новость
Библиотека программиста запускает конкурс, который взорвет вашу ленту: создайте самую смешную альтернативную версию реальной IT-новости!
Правила просты:
1. Берете настоящую новость из мира технологий.
2. Переворачиваете её с ног на голову, чтобы смеялись…
Правила просты:
1. Берете настоящую новость из мира технологий.
2. Переворачиваете её с ног на голову, чтобы смеялись…
Junior Python Developer (Data) — до 200 000, удалёнка
Team Lead (Python) команды разработки — от 350 000 до 450 000 ₽, удалёнка (Москва)
Junior Python developer — от 100 000 до 130 000 ₽, офис (Москва)
Python разработчик, гибрид (Москва, Санкт-Петербург)
Программист Python junior — от 100 000 ₽, гибрид (Москва)
Библиотека питониста
Please open Telegram to view this post
VIEW IN TELEGRAM
Длинные логические выражения — бич читаемости. Вот простой пример:
if user["verified"] and event["date"] > datetime.now() and not event["full"]:
print("Here's the event signup form...")
Выглядит компактно, но читается не очень. Есть несколько способов сделать лучше.
if (user["verified"]
and event["date"] > datetime.now()
and not event["full"]):
print("Here's the event signup form...")
PEP8 рекомендует именно такой стиль — с операторами (
and
, or
) в начале строки.user_is_verified = user["verified"]
event_in_future = event["date"] > datetime.now()
event_not_full = not event["full"]
if user_is_verified and event_in_future and event_not_full:
print("Here's the event signup form...")
Такой подход улучшает понимание выражения до того, как вы вчитываетесь в детали.
def is_verified(user): return user["verified"]
def in_future(event): return event["date"] > datetime.now()
def not_full(event): return not event["full"]
if is_verified(user) and in_future(event) and not_full(event):
print("Here's the event signup form...")
Функции полезны, если важно сохранить short-circuit поведение (когда выражения дальше не выполняются, если результат уже ясен).
Если видите выражение вида
not (a or b)
— можно применить трансформацию:# Было:
not (a or b)
# Стало:
not a and not b
Пример:
def can_only_read(user):
return not (
user["role"] == "admin"
or "edit" in user["permissions"]
)
Упростим по де Моргану:
def can_only_read(user):
return user["role"] != "admin" and "edit" not in user["permissions"]
Теперь читается проще и интуитивнее.
✅ Вывод: не бойтесь разбивать выражения, давать им имена и упрощать через логические законы. Код должен быть понятным не только компьютеру, но и людям.
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🏗 7 архитектурных паттернов, которые должен знать каждый программист
Хочешь писать код, который не разваливается через полгода? Понимание архитектурных паттернов — ключ к стабильным и масштабируемым приложениям.
📌 Мы собрали 7 базовых подходов, которые должен знать каждый разработчик. Подходит для тех, кто хочет прокачать архитектурное мышление, уверенно проходить собеседования и строить проекты «на вырост».
👉 Ссылка на статью: https://clc.to/tgproglibacademy6
Библиотека питониста
Хочешь писать код, который не разваливается через полгода? Понимание архитектурных паттернов — ключ к стабильным и масштабируемым приложениям.
📌 Мы собрали 7 базовых подходов, которые должен знать каждый разработчик. Подходит для тех, кто хочет прокачать архитектурное мышление, уверенно проходить собеседования и строить проекты «на вырост».
👉 Ссылка на статью: https://clc.to/tgproglibacademy6
Библиотека питониста
👍 Команда дня: contextlib.suppress
Сегодня разберём полезную команду для работы с contextlib.suppress — удобный способ игнорировать определённые исключения без громоздкого try-except.
Зачем это нужно:
✅ Упрощает код, когда вы хотите молча пропустить определённые ошибки.
✅ Например, удаление файла, который может не существовать, или обработка данных, где некоторые ключи могут отсутствовать.
Пример из реальной жизни:
Библиотека питониста #буст
Сегодня разберём полезную команду для работы с contextlib.suppress — удобный способ игнорировать определённые исключения без громоздкого try-except.
from contextlib import suppress
# Игнорируем FileNotFoundError при удалении файла
with suppress(FileNotFoundError):
import os
os.remove("non_existent_file.txt")
Зачем это нужно:
Пример из реальной жизни:
data = {"name": "Alice"}
with suppress(KeyError):
print(data["age"]) # Не сломается, даже если ключа "age" нет
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Использование старых модулей может привести к неожиданным ошибкам в проектах.
Вот 11 устаревших Python-модулей и их современные аналоги:
Модуль
pipes
был удален, так как был заменен более мощным и кросс-платформенным модулем subprocess
.import subprocess
result = subprocess.run("echo Hello | tr a-z A-Z", shell=True, capture_output=True, text=True)
print(result.stdout) # HELLO
Тип
Text
был предназначен для совместимости с Python 2, и теперь его можно заменить на str
.def greet(name: str) -> str:
return f"Hello, {name}!"
Модуль
urllib
устарел для работы с HTTP-запросами. Вместо него лучше использовать requests
или urllib3
.import requests
response = requests.post('https://httpbin.org/post', json={'name': 'Yang'})
print(response.json())
Модуль
crypt
устарел и его заменил более безопасный модуль bcrypt
для хеширования паролей.import bcrypt
password = b"strongpassword"
hashed = bcrypt.hashpw(password, bcrypt.gensalt())
С Python 3.9 можно использовать встроенные типы без импорта из модуля
typing
.def func(x: list[int]) -> dict[str, int]:
return {}
Использование
%
или .format()
устарело. Современный способ — это f-строки.name = "Yang"
print(f"My name is {name}.")
Модуль
cgi
устарел и заменен современными фреймворками для веб-разработки, такими как Flask
или FastAPI
.Модуль
ossaudiodev
устарел, и для работы с аудио рекомендуется использовать такие модули, как pyaudio
или sounddevice
.Модуль
pickle
может быть опасным для использования, так как есть риски выполнения вредоносного кода. Для безопасной сериализации лучше использовать json
.import json
data = {"name": "Yang"}
with open('data.json', 'w') as f:
json.dump(data, f)
Эти модули устарели, и теперь лучше использовать
asyncio
для асинхронного программирования.Модуль
random
использует предсказуемый алгоритм, который небезопасен для генерации паролей. Используйте secrets
для криптографически стойких случайных чисел.import secrets
password = secrets.token_hex(16)
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🎙 Что послушать: Developer Trends 2025
Новый выпуск подкаста Talk Python to Me посвящён главным трендам 2025 года:
➡️ какие технологии на подъёме,
➡️ что показывает последний опрос Stack Overflow,
➡️ и куда движется Python-сообщество.
📌 Темы:
— Стоит ли изучать новые базы данных или это хайп?
— Что теряет актуальность?
— Как поменялись роли разработчиков и ожидания в индустрии?
▶️ Слушать: https://clc.to/4neIiA
Библиотека питониста #буст
Новый выпуск подкаста Talk Python to Me посвящён главным трендам 2025 года:
📌 Темы:
— Стоит ли изучать новые базы данных или это хайп?
— Что теряет актуальность?
— Как поменялись роли разработчиков и ожидания в индустрии?
▶️ Слушать: https://clc.to/4neIiA
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM